package com.csap.framework.validation.factory;

import com.csap.framework.annotation.apidoc.ApiProperty;
import com.csap.framework.annotation.apidoc.ApiPropertys;
import com.csap.framework.util.FinalConfigParam;

import java.lang.reflect.Method;
import java.util.stream.Stream;

/**
 * @author yangchengfu
 * @description 数据验证接口
 * @dataTime 2021年-01月-24日 21:06:00
 **/
public interface ValidateData {

    /**
     * 单参数使用 是否验证属性
     *
     * @param method    当前方法
     * @param fieldName 属性名称
     * @return 是否需要验证
     */
    default boolean isPropertieValidate(Method method, final String fieldName) {
        if (method.isAnnotationPresent(ApiProperty.class)) {
            return Stream.of(method.getAnnotation(ApiProperty.class)).anyMatch(i -> i.name().equals(fieldName) && i.required());
        } else if (method.isAnnotationPresent(ApiPropertys.class)) {
            return Stream.of(method.getAnnotation(ApiPropertys.class).value()).anyMatch(i -> i.name().equals(fieldName) && i.required());
        }
        return false;
    }

    /**
     * 过滤掉不需要验证的参数
     *
     * @param name 类型名称
     * @return
     */
    default boolean getClObj(String name) {
        boolean validate = true;
        if (FinalConfigParam.obj.contains(name)) {
            validate = false;
        }
        return validate;
    }

}
